package com.ruoyi.common.wx;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * 	微信提现
 * @author DEREK
 *
 */
@Component
public class WxPaymentConfig {

	@Value("${wxpay.config.appId}")
	private String appId;

	@Value("${wxpay.config.mchId}")
	private String mchId;

	@Value("${wxpay.config.key}")
	private String key;

	//转账请求接口地址
	public static final String pay_url="https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";

	public static final char[] N62_CHARS = {'0', '1', '2', '3', '4', '5', '6',
			'7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
			'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
			'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
			'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
			'x', 'y', 'z'};


	
	/**
	 * V3 商家转账到零钱
	 * 目前支持向指定微信用户的openid付款。
	 * @param pkcFile  商户证书文件
	 * @param orderNo  订单编号
	 * @param weixinOpenId  要付款的用户openid
	 * @param realname  收款用户姓名
	 * @param payAmount 转账金额
	 * @param desc  企业付款备注
	 * @param ip  ip地址
	 * @return
	 * @throws Exception 
	 */
	@SuppressWarnings("rawtypes")
	public TransferResponsEntity payToUser(String orderNo,String weixinOpenId,Double payAmount) throws Exception {
		Gson GSON = new GsonBuilder().create();
		//商户号
		String mchid = mchId;
		//申请商户号的appid或商户号绑定的appid（企业号corpid即为此appid）
		//用户在直连商户应用下的用户标示
		String openId = weixinOpenId;
		//商户证书编号
		String wechatPayserialNo = "16479067D1AFE27F30089EB1218467136030E5CA";
		//商户证书路径（在你本机测试时放你本机路径中的就可以）
		String privatekeypath = "E:\\workspace\\luckFriend\\微信资料\\微信证书\\apiclient_key.pem";
		Map<String, Object> postMap = new HashMap<String, Object>();
		postMap.put("appid", appId);
		postMap.put("out_batch_no", orderNo);
		//该笔批量转账的名称
		postMap.put("batch_name", "密搭微信提现");
		//转账说明，UTF8编码，最多允许32个字符
		postMap.put("batch_remark", "密搭交友微信提现");
		//转账金额单位为“分”。 总金额 
		postMap.put("total_amount", PayUtil.changeY2FV3(payAmount));
		//。转账总笔数
		postMap.put("total_num", 1);

		List<Map> list = new ArrayList<>();
		Map<String, Object> subMap = new HashMap<>(4);
		//商家明细单号
		subMap.put("out_detail_no", orderNo);
		//转账金额
		subMap.put("transfer_amount", PayUtil.changeY2FV3(payAmount));
		//转账备注
		subMap.put("transfer_remark", "密搭微信提现");
		//用户在直连商户应用下的用户标示
		subMap.put("openid", openId);
		//		subMap.put("user_name", RsaCryptoUtil.encryptOAEP(userName, x509Certificate));
		list.add(subMap);
		postMap.put("transfer_detail_list", list);

		//发起转账操作
		String resStr = PayUtil.postTransBatRequest(
				"https://api.mch.weixin.qq.com/v3/transfer/batches",
				GSON.toJson(postMap),
				wechatPayserialNo,
				mchid,
				privatekeypath);	
		System.out.println("微信返回string结果："+resStr);
		TransferResponsEntity transferResponsEntity = GSON.fromJson(resStr, TransferResponsEntity.class);
		return transferResponsEntity;
	}
}
